package com.dkm.orproject.dkmoa.service.serviceimpl;

import com.dkm.orproject.dkmoa.dao.OaSupplierTypeMapper;
import com.dkm.orproject.dkmoa.domain.OaSupplierType;
import com.dkm.orproject.dkmoa.service.OaSupplierTypeService;
import com.dkm.orproject.utils.utils.IdToobtainUtils;
import com.dkm.orproject.utils.utils.ThreeVo;
import com.dkm.orproject.utils.utils.Tools;
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 *  @ClassName : OaSupplierTypeServiceImpl  //供应商服务层实现类名
 *  @Description : OaSupplierTypeService的实现类 //描述
 *  @Author : zmh //作者
 *  @Date: 2020-11-24 09:28  //时间
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class OaSupplierTypeServiceImpl implements OaSupplierTypeService {

    /**
     * id生成工具类
     */
    @Resource
    IdToobtainUtils toobtainUtils;

    @Resource
    OaSupplierTypeMapper oaSupplierTypeMapper;

    @Resource
    Tools tools;


    /**
     * 根据Id删除该条供应商类型对象
     * @param pkSupplierTypeId
     * @return 删除的条数
     */
    @Override
    public int deleteByPrimaryKey(Long pkSupplierTypeId) {
        return oaSupplierTypeMapper.deleteByPrimaryKey(pkSupplierTypeId);
    }

    /**
     * 插入一条供应商类型
     * @param oaSupplierType 供应商类型对象
     * @return 回调函数
     */
    @Override
    public int insertSelective(OaSupplierType oaSupplierType) {
        oaSupplierType.setPkSupplierTypeId(toobtainUtils.getNumberId());
        return oaSupplierTypeMapper.insertSelective(oaSupplierType);
    }

    /**
     * 根据pkSupplierTypeId查询供应商类型对象
     * @param pkSupplierTypeId
     * @return 供应商类型对象
     */
    @Override
    public OaSupplierType selectByPrimaryKey(Long pkSupplierTypeId) {
        return oaSupplierTypeMapper.selectByPrimaryKey(pkSupplierTypeId);
    }

    /**
     * 根据OaSupplierType的id值修改
     * @param oaSupplierType
     * @return 回调函数
     */
    @Override
    public int updateByPrimaryKeySelective(OaSupplierType oaSupplierType) {
        return oaSupplierTypeMapper.updateByPrimaryKeySelective(oaSupplierType);
    }

    /**
     * 供应商类型总条数
     * @param oaSupplierType 供应商类型对象
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 回调函数
     */
    @Override
    public Long rowCount(OaSupplierType oaSupplierType, String startTime, String endTime) {
        return oaSupplierTypeMapper.rowCount(oaSupplierType,startTime,endTime);
    }

    /**
     * 分页查询所有供应商类型信息
     * @param oaSupplierType
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page 当前页数
     * @param limit 显示的行数
     * @return 所有规则制度类型对象的集合
     */
    @Override
    public List<OaSupplierType> selectAll(OaSupplierType oaSupplierType, String startTime, String endTime, Integer page, Integer limit) {
        PageHelper.startPage(page,limit);
        return oaSupplierTypeMapper.selectAll(oaSupplierType,startTime,endTime);
    }

    /**
     * 供应商类型批量删除
     * @param list list里存入id的集合
     * @return 回调函数
     */
    @Override
    public int deleteAll(List<Long> list) {
        return oaSupplierTypeMapper.deleteAll(list);
    }

    @Override
    public List<ThreeVo> loadOaSupplierType(Long oaSupplierTypeId, String show) {
        OaSupplierType supplierType = oaSupplierTypeMapper.selectByPrimaryKey(oaSupplierTypeId);
        List<OaSupplierType> oaSupplierTypes;
        if(StringUtils.isEmpty(show)){
            oaSupplierTypes = oaSupplierTypeMapper.loadOaSupplierType(oaSupplierTypeId);
        }else {
            oaSupplierTypes = oaSupplierTypeMapper.loadOaSupplierType(null);
        }
        List<ThreeVo> threeVos = new ArrayList<>();
        for (OaSupplierType oaSupplierType : oaSupplierTypes) {
            ThreeVo threeVo = new ThreeVo();
            if("1".equals(show)){
                if(supplierType!=null && supplierType.getSupplierSuperior().equals(oaSupplierType.getPkSupplierTypeId())){
                    threeVo.setSelected(true);
                }
            }else if("2".equals(show)){
              if(supplierType!=null && supplierType.getPkSupplierTypeId().equals(oaSupplierType.getPkSupplierTypeId())){
                threeVo.setSelected(true);
              }
            }
            threeVo.setValue(oaSupplierType.getPkSupplierTypeId());
            threeVo.setName(oaSupplierType.getSupplierTypeName());
            threeVo.setSuperId(oaSupplierType.getSupplierSuperior());
            threeVos.add(threeVo);
        }
        return tools.createTree(threeVos);
    }
}
